<template>
  <div>
    <!-- 搜索结果页-头部导航 -->
    <div class="search-result-container">
      <!-- 点击实现后退效果 -->
      <van-nav-bar title="搜索结果" left-arrow @click-left="$router.go(-1)" fixed class="bgc" />
    </div>
    <!-- 结果文章页 -->
    <div>
      <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad" :immediate-check="false">
        <ArticleItem v-for="obj in resultsList" :key="obj.art_id" :artObj="obj" :isShow="false" @click.native="itemClickFn(obj.art_id)"></ArticleItem>
      </van-list>
    </div>
  </div>
</template>

<script>
import { getSearchResultsApi } from '@/api'
import ArticleItem from '@/components/ArticleItem.vue'
export default {
  name: 'SearchResult',
  data() {
    return {
      page: 1, // 页码
      resultsList: [], // 结果页文章列表
      loading: false, // 加载中状态
      finished: false // 是否全部加载完成
    }
  },
  async created() {
    const res = await getSearchResultsApi({ page: this.page, q: this.$route.params.kw }) // q关键字通过获取路由中携带的参数
    this.resultsList = res.data.data.results
  },
  components: {
    ArticleItem
  },
  methods: {
    // 上拉加载更多
    async onLoad() { // 触底就会执行该回调
      if (this.resultsList.length > 0) {
        this.page++

        const res = await getSearchResultsApi({ page: this.page, q: this.$route.params.kw }) // q关键字通过获取路由中携带的参数
        if (res.data.data.results.length === 0) { // 所有数据都加载完毕
          this.finished = true
          return // 阻止下面逻辑代码的执行
        }
        this.resultsList = [...this.resultsList, ...res.data.data.results]
        // 数据更新完毕
        this.loading = false
      }
    },
    // 文章item详情的点击事件
    itemClickFn(id) { // 事件修饰符.native -> 给组件内根标签绑定原生的click点击事件
      // 跳转到文章详情页并携带文章id
      this.$router.push(`/detail?art_id=${id}`)
    }
  }
}
</script>

<style lang="less" scoped>
.search-result-container {
  padding-top: 46px;
}
// 回退箭头的颜色
/deep/ .van-nav-bar .van-icon {
  color: #fff;
}
// 搜索结果页的背景颜色
.van-nav-bar {
  background-color: #007bff;
}
</style>
